/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package DA;

import BE.BEUsuario;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;

/**
 *
 * @author Hunter
 */
public class DAUsuario {

    public ArrayList<BEUsuario> obtenerUsuarios()
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;

        ArrayList<BEUsuario> usuarios = new ArrayList<BEUsuario>();
        String query = "SELECT * FROM USUARIO";
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);
            BEUsuario usuario;
            while (rs.next())
            {
                usuario = new BEUsuario();
                usuario.setIdUsuario(rs.getInt("idusuario"));
                usuario.setIdPerfil(rs.getInt("idperfil"));
                usuario.setUsuario(rs.getString("usuario"));
                usuario.setFechaCreacion(rs.getDate("fechacreacion"));
                usuario.setEstado(rs.getString("estado"));
                
                usuarios.add(usuario);
            }

        }
        catch (Exception e)
        {
            JOptionPane.showMessageDialog(null,"Error al obtener los Usuarios:"+e.toString(),
                                          "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }

        bd.cierraConexion(con);
        return usuarios;
    }
    
    public int insertar(BEUsuario objUsuario)
    {
        
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;
        int idUsuario=-1;
        
        try
        {
            //guardo los datos del perfil

            con = bd.conectar();
            //JOptionPane.showMessageDialog(null,"Hola mundo","Error",JOptionPane.ERROR_MESSAGE);
            String query = "INSERT INTO usuario( idperfil, usuario, fechacreacion, estado, nintfallidos) VALUES ( ?, ?, ?, ?, ?)";

            PreparedStatement p=con.prepareStatement(query);
            p.setInt(1, objUsuario.getIdPerfil());
            p.setString(2, objUsuario.getUsuario());
            java.sql.Date auxDate= new Date(objUsuario.getFechaCreacion().getTime());
            p.setDate(3, auxDate);
            p.setString(4, objUsuario.getEstado());
            p.setInt(5, 0);
            
            p.execute();
            
            query="SELECT MAX(idusuario) FROM USUARIO";
            p=con.prepareStatement(query);
            rs=p.executeQuery();
            
            while(rs.next())
            {
                idUsuario=rs.getInt(1);
            }
            



        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos"+e.toString(),"Registro de Usuarios",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return -1;
        }
        bd.cierraConexion(con);
        
        //JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos","Registro de Usuarios",JOptionPane.INFORMATION_MESSAGE);
        return idUsuario;
        
    }

    public boolean existeUsuario(String usuario)
    {
        
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;
        boolean resultado=true;
        
        try
        {
            //guardo los datos del perfil

            con = bd.conectar();
            //JOptionPane.showMessageDialog(null,"Hola mundo","Error",JOptionPane.ERROR_MESSAGE);
            String query = "SELECT count(usuario) FROM usuario WHERE usuario=? ";

            PreparedStatement p=con.prepareStatement(query);
            p.setString(1, usuario);
            
            //JOptionPane.showMessageDialog(null,p.toString(),"Busqueda de Usuario",JOptionPane.INFORMATION_MESSAGE);
            
            
            rs=p.executeQuery();
            
            while(rs.next())
            {
                resultado=(rs.getInt(1)>=1);
            }
            
            //JOptionPane.showMessageDialog(null,rs.getRow()+"","Busqueda de Usuario",JOptionPane.INFORMATION_MESSAGE);
            
            
            bd.cierraConexion(con);
            


        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos"+e.toString(),"Registro de Usuarios",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return true;
        }
        
        
        return resultado;
            
        
        
    }

    public boolean actualizar(BEUsuario objUsuario) {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;
        int idUsuario=-1;
        
        try
        {
            //guardo los datos del perfil

            con = bd.conectar();
            //JOptionPane.showMessageDialog(null,"Hola mundo","Error",JOptionPane.ERROR_MESSAGE);
            String query = "UPDATE usuario SET idperfil=?, usuario=? WHERE idusuario=?";

            PreparedStatement p=con.prepareStatement(query);
            p.setInt(1, objUsuario.getIdPerfil());
            p.setString(2, objUsuario.getUsuario());
            p.setInt(3, objUsuario.getIdUsuario());
            
            
            p.execute();
            
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos"+e.toString(),"Registro de Usuarios",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return false;
        }
        bd.cierraConexion(con);
        
        //JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos","Registro de Usuarios",JOptionPane.INFORMATION_MESSAGE);
        return true;
    }

    public void actulizarEstadoAInactivo(BEUsuario objUsuario) {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;
        
        
        try
        {
            //guardo los datos del perfil

            con = bd.conectar();
            //JOptionPane.showMessageDialog(null,"Hola mundo","Error",JOptionPane.ERROR_MESSAGE);
            String query = "UPDATE usuario SET estado=? WHERE idusuario=?";

            PreparedStatement p=con.prepareStatement(query);
            p.setString(1, "INACTIVO");
            p.setInt(2, objUsuario.getIdUsuario());
            
            
            p.execute();
            
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos"+e.toString(),"Registro de Usuarios",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            
        }
        bd.cierraConexion(con);
        
        //JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos","Registro de Usuarios",JOptionPane.INFORMATION_MESSAGE);
        
    }

    public int obtenerIntentosFallidos(BEUsuario objUsuario) {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;
        int intentos = -1;
        
        try
        {
            //guardo los datos del perfil

            con = bd.conectar();
            //JOptionPane.showMessageDialog(null,"Hola mundo","Error",JOptionPane.ERROR_MESSAGE);
            String query = "Select nintfallidos from usuario WHERE idusuario=?";

            PreparedStatement p=con.prepareStatement(query);
            p.setInt(1, objUsuario.getIdUsuario());
            
            rs=p.executeQuery();
            
            while(rs.next())
            {
                intentos= rs.getInt(1);
            }
            //p.setInt(2, objUsuario.getIdUsuario());
            
            
            p.execute();
            
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos"+e.toString(),"Registro de Usuarios",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return intentos;
            
        }
        bd.cierraConexion(con);
        
        return intentos;
    }

    public void actualizarIntentosFallidos(BEUsuario objUsuario, int intentos) {
        
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;
        
        
        try
        {
            //guardo los datos del perfil

            con = bd.conectar();
            //JOptionPane.showMessageDialog(null,"Hola mundo","Error",JOptionPane.ERROR_MESSAGE);
            String query = "UPDATE usuario SET nintfallidos=? WHERE idusuario=?";

            PreparedStatement p=con.prepareStatement(query);
            p.setInt(1, intentos);
            p.setInt(2, objUsuario.getIdUsuario());
            
            
            p.execute();
            
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos"+e.toString(),"Actualizacion de estado de Usuarios",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            
        }
        bd.cierraConexion(con);
    }

    public void actulizarEstadoAActivo(BEUsuario objUsuario) {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;
        
        
        try
        {
            //guardo los datos del perfil

            con = bd.conectar();
            //JOptionPane.showMessageDialog(null,"Hola mundo","Error",JOptionPane.ERROR_MESSAGE);
            String query = "UPDATE usuario SET estado=?, nintfallidos=? WHERE idusuario=?";

            PreparedStatement p=con.prepareStatement(query);
            p.setString(1, "ACTIVO");
            p.setInt(2, 0);
            p.setInt(3, objUsuario.getIdUsuario());
            
            
            p.execute();
            
            bd.cierraConexion(con);
            
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos"+e.toString(),"Actualizacion de estado de Usuarios",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            
        }
        
    }




}
